前言 在组建企业的数据网络时,我们可能经常会遇到各种流量隔离的需求。
如图,该企业通过一台交换机连接着三个用户群体,分别是部门A的用户、部门B的用户以及访客;
除此之外交换机上还连接着公共服务器(Server),用于部署公司的官网页面。
现在企业的需求是:
A 部门内的用户之间能够进行二层通信,B 部门同理;但是 A、B 部门的用户之间不能进行二层通信。
访客区的任意一台PC除了能访问服务器外、不能访问任何其他设备、包括其他访客PC。
接下来,我们就分情况讨论,判断该采用什么方案,什么技术。
另外,因为正好涉及了vlan知识,还提及了vlan聚合技术,所以本文也一并介绍该技术。
vlan—hybrid接口 假设这是一个小型公司,交换机只是二层交换机。
那么根据需求,我们似乎可以给部门A划分一个vlan、部门B划分另一个vlan、然后访客机每一台再单独划分一个vlan。
这就就能实现“A、B 部门的用户之间不能进行二层通信”,“访客不能访问任何其他设备、包括其他访客PC”这两大需求了。
那么服务器呢?服务器应该配置为什么vlan才能保持所有设备都可以访问服务器?
。。
是的,只用现在学习过常规的access与trunk接口技术无法实现这个需求,毕竟交换机与服务器上的链路只能通行一个vlan的流量。
除非给所有接口都配置为hybrid接口,连接到服务器的接口剥离所有vlan标签,连接到其他设备的接口剥离服务器所在vlan的标签:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 vlan batch 12 34 5 6 100 int g0/0/1 port link hybrid port hybrid untagged vlan 12 100 port hybrid pvid vlan 12 int g0/0/2 port link hybrid port hybrid untagged vlan 12 100 port hybrid pvid vlan 12 int g0/0/3 port link hybrid port hybrid untagged vlan 34 100 port hybrid pvid vlan 34 int g0/0/4 port link hybrid port hybrid untagged vlan 34 100 port hybrid pvid vlan 34 int g0/0/5 port link hybrid port hybrid untagged vlan 5 100 port hybrid pvid vlan 5 int g0/0/6 port link hybrid port hybrid untagged vlan 6 100 port hybrid pvid vlan 6 int g0/0/23 port link hybrid port hybrid untagged vlan all port hybrid pvid vlan 100
如此一来,就能满足所有的要求了。
端口隔离 上述使用hybrid接口的方式确实可行,但是麻烦,尤其是需要使用大量的vlan去让访客区互相隔离。如果应用场景更复杂一些,设备数量多一些,配置将会很难。(比如放行vlan、配置vlanif)
实现设备之间的流量隔离,除了使用vlan,还有另外一种技术——端口隔离。
端口隔离是指交换机上的每个端口或者说接口,之间互相流量隔离。
隔离模式 端口隔离有两种模式——单向隔离与组内隔离。
单向隔离是一个接口单方面的隔离另一个接口(丢弃收到的报文),但不影响自己发送给对方,类似于“屏蔽”。
组内隔离是配置端口隔离时划分分组,同一分组内的接口之间互相隔离,分组内接口可以与组外接口通信。
配置
配置端口单向隔离
执行命令system-view ,进入系统视图。
(可选)执行命令port-isolate mode { l2 | all },配置端口隔离模式。
默认情况下,端口隔离模式为二层隔离,但三层互通。
配置为all的话就是二层三层都隔离。
执行命令interface interface-type interface-number ,进入以太网接口视图。
执行命令am isolate interface-type interface-number ,配置端口单向隔离。
如果是希望接口A单向隔离接口B,也就是接口A可以发送报文给接口B,但接口B无法发送给接口A。
就再接口A的视图下进行am isolate 接口B的配置。
配置端口隔离组
执行命令system-view ,进入系统视图。
(可选)执行命令port-isolate mode { l2 | all },配置端口隔离模式。
默认情况下,端口隔离模式为二层隔离,但三层互通。
配置为all的话就是二层三层都隔离。
执行命令interface interface-type interface-number ,进入以太网接口视图。
执行命令port-isolate enable [ group group-id ],启动端口隔离功能。
既然是配置命令一样,又是对多个接口进行配置,所以配置端口隔离组可以先配置端口组,然后在接口组下启用port-isolate enable
隔离组与隔离组之间是能够互相访问的,如果要禁止隔离,就再配置单向隔离。
回到前言中的案例进行配置
(重新贴一下图)
我们可以为访客区配置端口隔离,解放一部分vlan。
1 2 3 4 5 6 7 8 #创建名为pi的接口组,添加组成员,然后配置port-isolate enable [magiku]port-group pi [magiku-port-group-pi]group-member GigabitEthernet 0/0/5 to GigabitEthernet 0/0/6 [magiku-port-group-pi]port-isolate enable #以下两条命令为自动生成输入的 [magiku-GigabitEthernet0/0/5]port-isolate enable [magiku-GigabitEthernet0/0/6]port-isolate enable [magiku-port-group-pi]
但我们还得保持访客区除了服务器外,不能与其他部门设备通信,所以vlan还得保留。(别忘了vlan间不可二层通信)
但可以配置整个访客区为同一个vlan,这里我直接新建一个vlan
1 2 3 4 5 6 7 8 9 10 [magiku]vlan 56 [magiku-vlan56]q #既然配置过接口组了,那么就在接口组下配吧。(会复读你在接口组下配的命令) [magiku]port-group pi [magiku-port-group-pi]port hybrid pvid vlan 56 [magiku-GigabitEthernet0/0/5]port hybrid pvid vlan 56 [magiku-GigabitEthernet0/0/6]port hybrid pvid vlan 56 [magiku-port-group-pi]port hybrid untagged vlan 56 100 [magiku-GigabitEthernet0/0/5]port hybrid untagged vlan 56 100 [magiku-GigabitEthernet0/0/6]port hybrid untagged vlan 56 100
MUX VLAN 我们前面的配置都满足了需求,也避免了配置大量的vlan,但其实还有一个问题。
那就是我们是用的hybrid接口技术进行vlan的配置,而hybrid接口属于华为私有技术,同时华为没有做低端的交换机产品,在普通中小企业中占有量很少,所以这总归不是一个通用性高的方案。
MUX VLAN(Multiplex VLAN,多路复用形vlan)提供了一种通过VLAN进行网络资源控制的机制,是公开通用的一种技术。
MUX VLAN是通过设置主vlan与从vlan来实现vlan的弹性管控。
我们形象的在拓扑上比划一下。
把整个大区域定为主vlan,而部门是从vlan。那么部门之间就无法访问,因为它们属于不同的从vlan。
而服务器不属于从vlan,它在主vlan里,可以与整个主vlan内设备互相访问。
另外,MUX LAN中,从vlan分两种类型:
Group VLAN :跟普通vlan一样,同vlan互相访问,不同vlan间隔离。
Separate VLAN :跟配置了端口隔离的vlan一样,不就不同vlan间隔离,同vlan内部也隔离。
配置 配置主vlan:
执行命令system-view ,进入系统视图。
执行命令vlan vlan-id ,创建VLAN并进入VLAN视图。如果VLAN已经创建,则直接进入VLAN视图。
执行命令mux-vlan ,配置该VLAN为主VLAN。
配置从VLAN(Group VLAN类型):
执行命令vlan vlan-id ,进入已经成功创建的主VLAN视图。
执行命令subordinate group { vlan-id1 [ to vlan-id2 ] } ,配置指定VLAN为互通型从VLAN。
配置VLAN为互通型从VLAN前,该VLAN必须已经创建。
一个主VLAN下最多配置128个互通型从VLAN。
配置从VLAN(Separate VLAN)
执行命令vlan vlan-id ,进入已经成功创建的主VLAN视图。
执行命令subordinate separate vlan-id ,配置指定VLAN为隔离型从VLAN。
配置VLAN为隔离型从VLAN前,该VLAN必须已经创建。
一个主VLAN下只能配置一个隔离型从VLAN。
同一MUX VLAN中互通型从VLAN和隔离型从VLAN的VLAN ID不能相同。
在接口上启用MUX VLAN功能:
执行命令interface interface-type interface-number ,进入接口视图。
执行命令port mux-vlan enable ,启用接口的MUX VLAN功能。
配置案例
还是这张图,我们按图中的划分从0配置一遍:
完成基础的vlan划分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #创建需要的vlan [magiku]vlan batch 12 34 56 100 #为每个接口配置好vlan [magiku]interface GigabitEthernet 0/0/1 [magiku-GigabitEthernet0/0/1]port link-type access [magiku-GigabitEthernet0/0/1]port default vlan 12 [magiku-GigabitEthernet0/0/1]interface GigabitEthernet 0/0/2 [magiku-GigabitEthernet0/0/2]port link-type access [magiku-GigabitEthernet0/0/2]port default vlan 12 [magiku-GigabitEthernet0/0/2]interface GigabitEthernet 0/0/3 [magiku-GigabitEthernet0/0/3]port link-type access [magiku-GigabitEthernet0/0/3]port default vlan 34 [magiku-GigabitEthernet0/0/3]interface GigabitEthernet 0/0/4 [magiku-GigabitEthernet0/0/4]port link-type access [magiku-GigabitEthernet0/0/4]port default vlan 34 [magiku-GigabitEthernet0/0/4]interface GigabitEthernet 0/0/5 [magiku-GigabitEthernet0/0/5]port link-type access [magiku-GigabitEthernet0/0/5]port default vlan 56 [magiku-GigabitEthernet0/0/5]interface GigabitEthernet 0/0/6 [magiku-GigabitEthernet0/0/6]port link-type access [magiku-GigabitEthernet0/0/6]port default vlan 56 [magiku-GigabitEthernet0/0/6]interface GigabitEthernet 0/0/23 [magiku-GigabitEthernet0/0/23]port link-type access [magiku-GigabitEthernet0/0/23]port default vlan 100 [magiku-GigabitEthernet0/0/23]q
配置MUX VLAN:
1 2 3 4 [magiku]vlan 100 [magiku-vlan100]mux-vlan [magiku-vlan100]subordinate group 12 34 [magiku-vlan100]subordinate separate 56
在接口上开启MUX VLAN功能:
1 2 3 [magiku]port-group muxvlan [magiku-port-group-muxvlan]group-member GigabitEthernet 0/0/1 to GigabitEthernet0/0/6 GigabitEthernet 0/0/23 [magiku-port-group-muxvlan]port mux-vlan enable
验证:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 PC>ping 192.168.1.250 Ping 192.168.1.250: 32 data bytes, Press Ctrl_C to break From 192.168.1.250: bytes=32 seq=1 ttl=255 time=15 ms From 192.168.1.250: bytes=32 seq=2 ttl=255 time<1 ms From 192.168.1.250: bytes=32 seq=3 ttl=255 time=31 ms From 192.168.1.250: bytes=32 seq=4 ttl=255 time=32 ms From 192.168.1.250: bytes=32 seq=5 ttl=255 time=15 ms --- 192.168.1.250 ping statistics --- 5 packet(s) transmitted 5 packet(s) received 0.00% packet loss round-trip min/avg/max = 0/18/32 ms PC>ping 192.168.1.5 Ping 192.168.1.5: 32 data bytes, Press Ctrl_C to break From 192.168.1.2: Destination host unreachable From 192.168.1.2: Destination host unreachable From 192.168.1.2: Destination host unreachable From 192.168.1.2: Destination host unreachable From 192.168.1.2: Destination host unreachable --- 192.168.1.5 ping statistics --- 5 packet(s) transmitted 0 packet(s) received 100.00% packet loss
完美符合要求!
注意事项 MUX VLAN接口主要用于交换机连接终端设备的链路上,接口必须以Access类型或Hybrid Untagged类型加入MUX VLAN。
另外,如果指定VLAN ID已经被用于MUX VLAN中,那么该VLAN不能用于VLANIF接口、VLAN Mapping、VLAN Stacking等其他vlan相关的配置。
如果希望为“主vlan”配置vlanif接口,让所有“从接口”使用这一个vlanif接口作为网关进行通信,那么可以考虑接下来介绍的vlan聚合技术。
Vlan聚合 在一般的三层交换机中,通常是采用一个VLAN对应一个VLANIF接口的方式实现广播域之间的互通,这在某些情况下导致了IP地址的浪费。
划分一个子网后,则会有几个IP无法被用于设备上,一个是主机号全0的表示网段,一个是主机号全1的表示该网段的广播地址,另外还需要一个IP地址用做网关(Vlanif)。
此外,每个子网并不是所有地址都会被使用。比如说某办公区有15台主机,那么我们需要划分/27的掩码,实际包含31个ip地址,去掉网络地址、广播地址、网关地址、以及办公区使用的15台主机用的地址,还留下13个地址属于空闲浪费的状态。
VLAN聚合(VLAN Aggregation,也称Super VLAN)指在一个物理网络内,用多个VLAN(称为Sub-VLAN)隔离广播域,并将这些Sub-VLAN聚合成一个逻辑的VLAN(称为Super-VLAN),这些Sub-VLAN使用同一个IP子网和网关,进而达到节约IP地址资源的目的。
相对每一个普通VLAN都有一个三层逻辑接口和若干物理接口,VLAN聚合定义的Super-VLAN和Sub-VLAN比较特殊:
Sub-VLAN:只包含物理接口,不能建立VLANIF接口,用于隔离广播域。每个Sub-VLAN内的主机与外部的三层通信是靠Super-VLAN的VLANIF接口来实现的。
Super-VLAN:只建立三层VLANIF接口,不包含物理接口,与子网网关对应。一个Super-VLAN可以包含一个或多个Sub-VLAN。
在同一个Super-VLAN中,无论主机属于哪一个Sub-VLAN,它的IP地址都配置在Super-VLAN对应的子网网段内。
这样,Sub-VLAN间可以共同一个网关,实现了不同广播域使用同一子网网段地址的目的,减少了闲置地址浪费。
事实上,vlan聚合更主要的作用是可以将多个小型VLAN(以及其子网)合并成一个较大的逻辑VLAN(子网),简化网络结构和管理。
配置
执行命令system-view ,进入系统视图。
执行命令vlan vlan-id ,创建VLAN并进入VLAN视图。
本配置步骤中的vlan-id 是vlan聚合后的“主vlan”的id。
执行命令aggregate-vlan ,创建Super-VLAN。
Super-VLAN中不能包含任何物理接口。
VLAN1不能配置为Super-VLAN。
执行命令access-vlan { vlan-id1 [ to vlan-id2 ] } ,将VLAN加入Super-VLAN。
将VLAN加入到Super-VLAN中时,必须保证VLAN没有创建对应的VLANIF接口。
案例
以图中拓扑为例,将原来的VLAN12与VLAN34聚合为VLAN100,并使用vlanif100作为主机的网关。
1 2 3 4 5 6 7 8 9 10 <Huawei>system-view [Huawei]sysname SW1 [SW1]VLAN batch 12 34 100 [SW1]VLAN 100 [SW1-vlan100]aggregate-vlan [SW1-vlan100]access-vlan 12 34 [SW1-vlan100]q [SW1]interface Vlanif 100 [SW1-Vlanif100]ip address 192.168.1.254 24 [SW1-Vlanif100]q
配置SW1接口类型,放行vlan。
1 2 3 4 5 6 [SW1]interface GigabitEthernet 0/0/1 [SW1-GigabitEthernet0/0/1]port link-type trunk [SW1-GigabitEthernet0/0/1]port trunk allow-pass vlan 12 [SW1-GigabitEthernet0/0/1]interface GigabitEthernet 0/0/2 [SW1-GigabitEthernet0/0/2]port link-type trunk [SW1-GigabitEthernet0/0/2]port trunk allow-pass vlan 34
SW2与SW3的配置就不做展示了,基础的vlan配置。
现在vlan聚合就已经配置好了,使用PC1可以进行测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 PC>ping 192.168.1.254 Ping 192.168.1.254: 32 data bytes, Press Ctrl_C to break From 192.168.1.254: bytes=32 seq=1 ttl=255 time=62 ms From 192.168.1.254: bytes=32 seq=2 ttl=255 time=94 ms From 192.168.1.254: bytes=32 seq=3 ttl=255 time=63 ms From 192.168.1.254: bytes=32 seq=4 ttl=255 time=47 ms From 192.168.1.254: bytes=32 seq=5 ttl=255 time=93 ms --- 192.168.1.254 ping statistics --- 5 packet(s) transmitted 5 packet(s) received 0.00% packet loss round-trip min/avg/max = 47/71/94 ms PC>ping 192.168.1.2 Ping 192.168.1.2: 32 data bytes, Press Ctrl_C to break From 192.168.1.2: bytes=32 seq=1 ttl=128 time=47 ms From 192.168.1.2: bytes=32 seq=2 ttl=128 time=47 ms From 192.168.1.2: bytes=32 seq=3 ttl=128 time=62 ms From 192.168.1.2: bytes=32 seq=4 ttl=128 time=63 ms From 192.168.1.2: bytes=32 seq=5 ttl=128 time=31 ms --- 192.168.1.2 ping statistics --- 5 packet(s) transmitted 5 packet(s) received 0.00% packet loss round-trip min/avg/max = 31/50/63 ms PC>ping 192.168.1.3 Ping 192.168.1.3: 32 data bytes, Press Ctrl_C to break From 192.168.1.1: Destination host unreachable From 192.168.1.1: Destination host unreachable From 192.168.1.1: Destination host unreachable From 192.168.1.1: Destination host unreachable From 192.168.1.1: Destination host unreachable --- 192.168.1.3 ping statistics --- 5 packet(s) transmitted 0 packet(s) received 100.00% packet loss
能通网关,能通同子vlan的PC2,不能通不同子vlan的PC2;都符合预期。
假如希望不同子vlan可以互通,因为网关都是同一个ip,所以可以在网关配置ARP代理。
1 2 [SW1]interface Vlanif 100 [SW1-Vlanif100]arp-proxy inter-sub-vlan-proxy enable
注意配置时,不要输入错为arp-proxy inner-sub-vlan-proxy enable,这个命令
这时PC1就可以ping通不同子vlan下的PC3了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 PC>ping 192.168.1.3 Ping 192.168.1.3: 32 data bytes, Press Ctrl_C to break From 192.168.1.3: bytes=32 seq=1 ttl=127 time=109 ms From 192.168.1.3: bytes=32 seq=2 ttl=127 time=125 ms From 192.168.1.3: bytes=32 seq=3 ttl=127 time=94 ms From 192.168.1.3: bytes=32 seq=4 ttl=127 time=156 ms From 192.168.1.3: bytes=32 seq=5 ttl=127 time=140 ms --- 192.168.1.3 ping statistics --- 5 packet(s) transmitted 5 packet(s) received 0.00% packet loss round-trip min/avg/max = 94/124/156 ms
另外强调一下聚合vlan不能用于二层通信,也就是不能配置在接口上(包括在trunk上放行也是不允许的)
假设在SW1另一侧连接一台交换机,配置trunk口,放行所有vlan。
子vlan发出的二层通信会维持其原有vlan标签,比如说该拓扑下PC1对外发送的二层通信会一直保持其vlan12的标签,不会被转换成vlan100。